import winim/lean
import winim/inc/winuser
import std/[times, os, strutils]
import std/random

var
  lis: array[0..1, string] = ["#签到", "#打卡"] 
  lis1: array[0..166, string] = ["鱼子酱", "大酱汤", "炒乌冬", "乌冬面", "醋饭", "鲷鱼烧", "拉面", "海鲜汤", "牛尾汤", "橙醋蟹",
        "海胆汤", "炒牡蛎", "大阪烧", "春卷", "泡菜烧", "鸡肉串", "铜锣烧", "荞麦面", "鳗鱼饭", "苹果饼",
        "蒙多排骨", "奥恩汤", "薇恩豆腐", "炸发条", "安尼鱼", "佐伊饺子", "芮尔饼", "瑞兹煮", "扎克烧", "卡兹克锅", "璐璐烧麦", "五郎红肠", "叔又饿了",
        "奶酪饼", "阿富汗披萨", "玉子烧", "糖醋排骨", "明太鱼", "鳕鱼烧", "五花肉", "章鱼烧", "西京烧", "麻婆豆腐",
        "担担面", "里脊", "牛霖肉", "三文鱼", "酒蒸蛤蜊", "关东煮", "寿喜锅", "三明治", "蛋包饭", "牛肉饭", "石狩锅",
        "昆布", "海苔", "酱汁", "水饺", "饺子", "煎饺", "蒸饺", "酱油拌面", "牛油果", "牛腩", "牛肚", "牛肝", "鸡蛋烧",
        "鱿鱼汤", "鲤鱼汤", "乌贼面", "寿司", "冷面", "炒年糕", "安康鱼", "纳豆饭", "油泼面", "山葵盖饭", "蚬汤", "蚬子面",
        "生姜烧", "鳜鱼", "蒜蓉汤", "鲑鱼", "杏鲍菇", "鲍鱼", "味噌汤", "烤肉", "炸鸡块", "羊排", "番茄炒蛋", "肝盖饭",
        "信玄袋", "鲔鱼汤", "喜知次", "龙虾", "肉串", "鸡蛋卷", "大福", "牛筋", "梅子酒", "线鱼脊", "云吞面", "刺鲳鱼",
        "虾肉山芋", "汉堡肉", "番茄意面", "排骨面", "咖喱饭", "咖喱牛肉", "蕃茄豆腐", "秋刀鱼", "什锦面", "鱼生碎",
        "葱炒肉", "熏肠", "沙丁鱼", "什锦拌", "花蛤", "糯米饭", "鸡肉春卷", "炒培根", "红糟排骨", "黑炒饭", "麻辣汤",
        "竹荚鱼", "玉米饼", "腊肉", "爆羊肉", "绿麻豆腐", "烧虾仁", "鱼丸面", "煲仔饭", "肠炒面", "青花鱼", "横膈膜肉",
        "麻婆凉面", "肉汁乌冬", "奶油海鲜", "薄切牛肉", "炸火腿", "炸酱面", "乌鱼子", "银鲑", "咖喱炒面", "葱花蛋",
        "仁当牛", "鸡酱烧", "蕈菇海螺", "炖牛舌", "蟹面", "炒酱面", "烘肉卷", "鸡肉锅", "马头鱼", "方头鱼", "菌菇汤",
        "寿喜烧", "小圆", "甜点", "牛舌", "泡菜鱼", "牛肉煮", "盐渍鲭鱼意面", "虾仁", "海鲜饭", "牛肉饭", "鲣鱼"]
  # y = @[1, 2, 3, 4, 5, 6]
# let wname1: LPCWSTR = L"Mozilla Firefox"
# let winclass: LPCWSTR = L"MozillaCompositorWindowClass"
# var
#   dt = dateTime(1970, mJan, 01, 00, 00, 00, 00, utc())
#   tm = dt.toTime() 
 
# doAssert format(tm, "yyyy-MM-dd'T'HH:mm:ss", utc()) == "1970-01-01T00:00:00"

echo lis
# echo lis1  

# proc testOpenArray(x: openArray[string]) = echo repr(x)
# proc testOpenArray(x: openArray[string]) = echo x

# testOpenArray(lis)
# testOpenArray(lis1)


proc time_count(interval:int = 2) = 
  var
    t1 = now()
    t2 = now() + initDuration(minutes = interval) 
  echo "current time[$1]" % [t1.format("HH:mm:ss")]
  echo "\n[$#] would be coming." % [t2.format("HH:mm:ss")]

# proc findWindowFromMouse_u(winclass: LPCWSTR, winname: LPCWSTR) =
#   sleep(4000)
#   var
#     # lpPoint: LPPOINT
#     pointold: LPPOINT
#     point: POINT
#     phw: HWND 
#   # 1347, 761    
   
#   phw = FindWindow(winclass, winname)
#   echo phw
 
# findWindowFromMouse_u(winclass, wname1)
proc mykey_press_release_u() = 
  # key 1 : 0x31 or 49
  # key 2 : 0x32 or 50
  # key 3 : 0x33 or 51
  # ctrl  : 0x11 or 17
  # alt   : 0x12 or 18

  # 按下ctrl+v
  # win32api.keybd_event(0x11, 0, 0, 0)
  # win32api.keybd_event(0x56, 0, 0, 0)
  # win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
  # win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
  # time.sleep(1)
  # # 按下回车
  # win32api.keybd_event(0x0D, 0, 0, 0)
  # win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
  keybd_event(0x11, 0, 0, 0)
  keybd_event(0x31, 0, 0, 0)
  keybd_event(0x31, 0, KEYEVENTF_KEYUP, 0)
  keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)

var 
  phw: HWND

var
  pointold: LPPOINT
  point: POINT
  # wintitle: LPWSTR
  # isOk: bool

var
  # content: seq[LPWSTR]
  pData, content: LPWSTR
  hData: HWND
  # lpRect: LPRECT

# content = L"加油" & L","
content = lis[0]

hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(content)+1)
pData = cast[LPWSTR](GlobalLock(hData))
lstrcpy(pData, content)
GlobalUnlock(hData)

point.x = 1347
point.y = 761
# phw = FindWindow(winclass, wname1)
GetCursorPos(pointold)
# point.x = pointold.x
# point.y = pointold.y 66012
sleep(4000)
mykey_press_release_u()
sleep(1000)
phw = WindowFromPoint(cast[POINT](pointold))
# GetWindowText(phw, wintitle, 125)
# isOk = GetWindowText(cast[HWND](0x000409E6), wintitle, 125)
# isOk = GetWindowText(phw, wintitle, 125)
# echo phw
# if isOk:
#   echo wintitle
# GetWindowRect(phw, lpRect)
# SetCursorPos(1347, 761) 
# 131424 0x000409E6
# mouse_event(MOUSEEVENTF_LEFTDOWN, 1394, 764, 0, 0)
ShowWindow(phw, SW_SHOW)
SetCursorPos(1347, 761)
# SetCursorPos(1347, 761) 
# 131424 0x000409E6

mouse_event(MOUSEEVENTF_LEFTDOWN, 1394, 764, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
sleep(2000)
# mouse_event(MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
# sleep(2000)

# Clipboard part
# OpenClipboard(phw)
# EmptyClipboard()
# # CF_TEXT 
# # SetClipboardData(CF_TEXT, hData)
# # GetClipboardData(CF_TEXT)
# SetClipboardData(CF_UNICODETEXT, hData)
# GetClipboardData(CF_UNICODETEXT)
# CloseClipboard()
# SendMessage(phw, WM_PASTE, 0, 0)
# sleep(1000)
# # Ctrl+V
# keybd_event(0x11, 0,0,0)
# keybd_event(0x56, 0,0,0)
# keybd_event(0x56, 0, KEYEVENTF_KEYUP,0)
# keybd_event(0x11, 0, KEYEVENTF_KEYUP,0)
# sleep(1000)
# # Enter Key Press
# keybd_event(VK_RETURN, 0,0,0)
# keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0)
# # SendMessage(phw, WM_KEYDOWN, VK_RETURN, 0)
# # SendMessage(phw, WM_KEYUP, VK_RETURN, 0)
# sleep(1000)

for i in 0..30:
  time_count(9)
  mykey_press_release_u()
  for i in 0..7:
    content = lis1[rand(0..166)] & ","
    hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(content)+4)
    pData = cast[LPWSTR](GlobalLock(hData))
    lstrcpy(pData, content)
    GlobalUnlock(hData)

    OpenClipboard(phw)
    EmptyClipboard()
    # CF_TEXT 
    # SetClipboardData(CF_TEXT, hData)
    # GetClipboardData(CF_TEXT)
    SetClipboardData(CF_UNICODETEXT, hData)
    GetClipboardData(CF_UNICODETEXT)
    CloseClipboard()
    SendMessage(phw, WM_PASTE, 0, 0)
    sleep(1000)
    # Ctrl+V
    keybd_event(0x11, 0,0,0)
    keybd_event(0x56, 0,0,0)
    keybd_event(0x56, 0, KEYEVENTF_KEYUP,0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP,0)
    sleep(1000)
    # Enter Key Press
    keybd_event(VK_RETURN, 0,0,0)
    keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0)
    # SendMessage(phw, WM_KEYDOWN, VK_RETURN, 0)
    # SendMessage(phw, WM_KEYUP, VK_RETURN, 0)
    sleep(6000)
  sleep(1000 * 60 * 9)

